home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / DSHJ2 / DOTEXT.C < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-10  |  4.3 KB  |  187 lines

  1. #include    <obdefs.h>
  2. #include    <gemdefs.h>
  3. #include    "comp.h"
  4.  
  5. #define        DEBUG        0
  6.  
  7. #define        LBRK        1
  8. #define        SLAVE        2
  9. #define        LBRKSLAVE    3
  10. #define        OUTPUT        4
  11. #define        SLAVEOUTPUT    6
  12. #define        LBRKSLAVEOUTPUT    7
  13.  
  14. /*    Device Type = sdevm    */
  15. #define        DNUM        4    /* number of graphics devices    */
  16. #define        SLOR        0    /* Low    Res    320  x 200     */
  17. #define        SMDR        1    /* Medium Res    640  x 200     */
  18. #define        SHIR        2    /* High   Res    640  x 400    */
  19. #define        PRNT        3    /* Laser  Ptr    2400 x 3180    */
  20.  
  21. extern    unsigned    sdevm;        /* Current device mode        */
  22. extern    unsigned    zrat;        /* Output zoom ratio in 10ths    */
  23. extern     char        cpabt;        /* composition abort flag    */
  24. extern    char        *fend(), *bend(), *malloc();
  25. extern    unsigned long    init_y;
  26. extern    unsigned    init_x;
  27.  
  28. struct slvll    *slv;        /* slave list pointer        */
  29. FDB        *orect_MFDB;    /* output rectangle MFDB    */
  30. int        clip_X0;    /* output rectangle clip X0    */
  31. int        clip_X1;    /* output rectangle clip X1    */
  32. int        clip_Y0;    /* output rectangle clip Y0    */
  33. int        clip_Y1;    /* output rectangle clip Y1    */
  34. static
  35. struct txtattr    savecp;        /* save cp struct for multi-op    */
  36.  
  37. /****************************************************************
  38.             Text Object Handler
  39.     Returns pointer to next text if cpabt is 0 or 8
  40.     else -1L for all other values of cpabt and 0L if
  41.     OUTPUT only is specified.
  42.     cpabt    0    -- no error
  43.         1    -- char has no flash position
  44.         2    -- double floating accent found
  45.         3    -- double space char found
  46.         4    -- line measure too short
  47.         5    -- line break error (no space)
  48.         6    -- text buffer full
  49.         7    -- no memory for slave or tag
  50.         8    -- Hit Region Feed
  51. ****************************************************************/
  52. char    *dotext(text,ptsarray,dmfdb,operation,done)
  53. struct textobj    *text;
  54. int        ptsarray[];
  55. FDB        *dmfdb;
  56. int        operation;
  57. int        *done;
  58. {
  59.     char    *cptr;
  60.  
  61.     switch(operation) {
  62.     case    LBRK:            /* 1 */
  63.         cptr = fend(text,done);
  64.         break;
  65.     case    SLAVE:            /* 2 */
  66.         setcpXY(ptsarray);
  67.         cptr = bend(text,done);
  68.         break;
  69.     case    OUTPUT:            /* 4 */
  70.         slv = text->slvlist;
  71.         outslave(ptsarray,dmfdb);
  72.         cptr = (char *)0L;
  73.         break;
  74.     case    LBRKSLAVE:        /* 3 */
  75.     case    LBRKSLAVEOUTPUT:    /* 7 */
  76.         f_move(&cp,&savecp,sizeof(cp));    /* save cp for bend()    */
  77.         cptr = fend(text,done);
  78.         if (!cpabt || cpabt == 4 || cpabt == 8)
  79.             f_move(&savecp,&cp,sizeof(cp));    /* restore cp..    */
  80.         else    break;
  81.     case    SLAVEOUTPUT:        /* 6 */
  82.         setcpXY(ptsarray);
  83.         cptr = bend(text,done);
  84.         if (operation != LBRKSLAVE) {    /* if output required    */
  85.             if (!cpabt || cpabt == 4 || cpabt == 8)
  86.                 outslave(ptsarray,dmfdb);
  87.         }
  88.         break;
  89.     }
  90.     return(cptr);
  91. }
  92.  
  93. outslave(ptsarray,dmfdb)
  94. int    ptsarray[];
  95. FDB    *dmfdb;
  96. {
  97.     orect_MFDB = dmfdb;
  98.     zrat = ptsarray[8];
  99.     if (ptsarray[10]) {
  100.         clip_X0 = ptsarray[11];
  101.         clip_Y0 = ptsarray[12];
  102.         clip_X1 = ptsarray[13];
  103.         clip_Y1 = ptsarray[14];
  104.     }
  105.     else {
  106.         clip_X0 = 0;
  107.         clip_Y0 = 0;
  108.         clip_X1 = dmfdb->fd_w;
  109.         clip_Y1 = dmfdb->fd_h;
  110.     }
  111.     if (sdevm == PRNT)
  112.         newdev(1);
  113.     show_slv();
  114.     if (sdevm == PRNT)
  115.         newdev(0);
  116. }
  117.  
  118. setcpXY(ptsarray)
  119. int    ptsarray[];
  120. {
  121.     init_x    = ptsarray[0];
  122.     init_y    = *((unsigned long *)(ptsarray + 1));
  123. }
  124.  
  125. struct slvll    *getslvbuf()
  126. {
  127.     struct slvll    *slvptr;
  128.  
  129.     if (!(slvptr = (struct slvll *)malloc(sizeof(struct slvll))))
  130.         {
  131.         IF_close();
  132.         IF_open(0);
  133.         if (!(slvptr = (struct slvll *)malloc(sizeof(struct slvll))))
  134.              return(0L);
  135.         }
  136.  
  137.     if (!(slvptr->bufptr = malloc(UTSIZE)))
  138.         {
  139.          IF_close();
  140.          IF_open(0);
  141.          if (!(slvptr->bufptr = malloc(UTSIZE)))
  142.              {
  143.         free(slvptr);
  144.         return(0L);
  145.          }
  146.     }
  147.     slvptr->fptr = (struct slvll *)0L;
  148.     return(slvptr);
  149. }
  150.  
  151. setslvlist(text)
  152. struct    textobj *text;
  153. {
  154.     struct    slvll    *nslv;
  155.  
  156.     if (text->slvlist) {
  157.         slv = text->slvlist;        /* set to begin list    */
  158.         while (slv->fptr)        /* not end of list...    */
  159.             slv    = slv->fptr;
  160.         if (!(nslv = getslvbuf()))    /* get new list member    */
  161.             cpabt = 7;
  162.         else {
  163.             slv->fptr = nslv;    /* add member to list    */
  164.             slv    = nslv;
  165.         }
  166.     }
  167.     else
  168.     if (!(slv = getslvbuf()))
  169.         cpabt = 7;
  170.     else    text->slvlist = slv;
  171. }
  172.  
  173. freeslvlist(slvlist)
  174. struct    slvll    *slvlist;
  175. {
  176.     struct    slvll    *slvptr = slvlist;
  177.  
  178.     if (slvptr != (struct slvll *)0L)
  179.       for (; ;) {
  180.         free(slvptr->bufptr);
  181.         free(slvptr);
  182.         if (slvptr->fptr == (struct slvll *)0L)
  183.             break;
  184.         else    slvptr = slvptr->fptr;
  185.       }
  186. }
  187.